import type {
  EntityApi,
  EntityPage,
  EntityReq,
  EntityModel,
  EntityImportReq,
  EntityExportReq,
  EntityKey,
  EntityKeyList,
  EntityCreateReq,
  EntityUpdateReq,
  EntityList,
} from "jmash-core";
export interface DeptApi extends EntityApi {}
/**
 * 部门查询接口
 */
export interface DeptReq extends EntityReq {
  // 租户ID（可选）
  tenant?: string;
  // 模糊匹配部门名称（可选）
  likeDeptName?: string;
  // 是否包含状态
  hasStatus?: boolean;
  // 指定部门状态（启用/禁用）进行精确匹配（可选）
  status?: boolean;
  // 部门类型
  deptType?: string;
  // 父部门ID（可选）
  parentId?: string;
  // 部门ID（可选）
  deptId?: string;
  // 排除部门ID（可选）
  excludeId?: string;
}

// 部门分页
export interface DeptPage extends EntityPage {
  results: DeptModel[];
}
// 部门列表
export interface DeptList extends EntityList {
  results: Array<DeptModel>;
}
// 部门主键列表
export interface DeptKeyList extends EntityKeyList {
  // 租户
  tenant?: string;
  // 角色ID/职务ID
  deptId?: string[];
}

/**
 * 部门表单接口，用于编辑部门信息
 */
export interface DeptUpdateReq extends EntityUpdateReq {
  // 租户ID（可选）
  tenant?: string;
  // 请求ID（用于防止重复提交，可选）
  requestId?: string;
  // 更新字段掩码（用于指定更新哪些字段，可选）
  updateMask: string;
  // 部门ID（若为编辑操作，则需提供）
  deptId?: string;
  // 部门编码
  deptCode?: string;
  // 部门名称
  deptName?: string;
  // 部门类型
  deptType?: string;
  // 上级部门ID
  parentId?: string;
  // 部门描述（可选）
  description?: string;
  // 部门状态（启用/禁用）
  status: boolean;
  // 开放访问
  isOpen?: boolean;
}
/**
 * 部门表单接口，用于新增部门信息
 */
export interface DeptCreateReq extends EntityCreateReq {
  // 租户ID（可选）
  tenant?: string;
  // 请求ID（用于防止重复提交，可选）
  requestId?: string;
  // 部门编码
  deptCode?: string;
  // 部门名称
  deptName?: string;
  // 部门类型
  deptType?: string;
  // 上级部门ID
  parentId?: string;
  // 部门描述（可选）
  description?: string;
  // 部门状态（启用/禁用）
  status: boolean;
  // 开放访问
  isOpen?: boolean;
}

export type DeptFormReq = DeptCreateReq | DeptUpdateReq;

// 组织机构主键
export interface DeptKey extends EntityKey {
  // 租户
  tenant?: string;
  // 部门ID
  deptId?: string;
}

// 组织机构实体
export interface DeptModel extends EntityModel {
  // 部门ID
  deptId?: string;
  // 部门编码
  deptCode?: string;
  // 部门名称
  deptName?: string;
  // 部门类型
  deptType?: string;
  // 父部门
  parentId?: string;
  // 部门描述
  description?: string;
  // 状态
  status?: boolean;
  children?: DeptModel[];
}

// 导入请求
export interface DeptImportReq extends EntityImportReq {
  // 租户
  tenant: string;
  // 用于检测重复请求的唯一字符串ID
  requestId: string;
  // 文件名
  fileNames?: string;
  // 是否新增标识
  addFlag?: boolean;
  // 更新字段掩码.
  updateMask: string;
}

// 导出请求
export interface DeptExportReq extends EntityExportReq {
  // 租户
  tenant: string;
  // 标题
  title?: string;
  // 显示文件名
  fileName?: string;
  // 筛选条件
  req: DeptReq;
}
/**
 * 启用禁用请求.
 */
export interface DeptEnableKeyList {
  // 租户
  tenant?: string;
  // 是否启用
  enable?: boolean;
  // 部门
  deptId?: string[];
}

export interface DeptMoveKey {
  // 租户
  tenant?: string;
  deptId?: string;
  up?: boolean;
}

// 启用/禁用
export interface DeptEnableKey {
  // 租户
  tenant?: string;
  // 是否启用
  enable?: boolean;
  // 组织ID
  deptId?: string;
}

// 部门树形下拉列表实体
export interface DeptTreeSelectModel {
  // 部门ID
  deptId?: string;
  // 部门名称
  deptName?: string;
  // 树形结构展示内容
  label: string;
  // 树形子级包含内容
  children?: DeptTreeSelectModel[];
}
